package interfaz;

import javax.swing.*;
import compiler.Compiler;
import compiler.Helper;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;


@SuppressWarnings("serial")
public class Interfaz extends JFrame{

	public static JTextArea history;
	public static JTextArea command;
	JPanel panel;
	JButton limpiar;
	JButton limpiarArchivo;
	JButton generar;
	JButton finalizar;
	public static String nomArchivo;
	public static String rutArchivo;
	Font letra = new Font("Impact", Font.BOLD, 14);

	@SuppressWarnings("unused")
	public static void main(String ... s)
	{
		JFileChooser elegirArchivo = new JFileChooser();
		int seleccion = elegirArchivo.showSaveDialog(new JFileChooser());
		if(seleccion == JFileChooser.CANCEL_OPTION)
			 System.exit(0);
		if(seleccion == JFileChooser.APPROVE_OPTION)
		{
			nomArchivo = elegirArchivo.getSelectedFile().getName();
			rutArchivo = elegirArchivo.getSelectedFile().getPath();
			nomArchivo.replace(".java", "");
			if(!rutArchivo.contains(".java"))
				rutArchivo.replace(".java", "");
			if(!rutArchivo.contains(".java"))
				rutArchivo += ".java";
			File archivo = new File(rutArchivo);
			if(!archivo.exists()){
				PrintWriter escribir;
				try {
					escribir = new PrintWriter(new BufferedWriter(new FileWriter(Interfaz.rutArchivo)));
					escribir.write("");
					
					escribir.close();
					Helper.fileWriter("import lejos.nxt.*;\r\n\r\npublic class "+Interfaz.nomArchivo+" {\r\npublic static void main(String[] args) {");
					
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		Interfaz interfaz = new Interfaz();
	}

	public Interfaz()
	{
		super("Ventana xD - " + nomArchivo);
		try
		{
		   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		}
		catch (Exception e)
		{
		   e.printStackTrace();
		}
		this.setSize(690, 410);
		this.setResizable(true);
		this.setLayout(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setIconImage(new ImageIcon("turtle.gif").getImage());
		this.getContentPane().setBackground(new Color(31, 111, 17));
		init();
		this.setVisible(true);
	}

	public void init()
	{
		history = new JTextArea();
		command = new JTextArea();	
		panel  = new JPanel();
		limpiar = new JButton();
		generar = new JButton();
		limpiarArchivo = new JButton();
		finalizar = new JButton();

		//Historial de instrucciones
		history.setBackground(Color.gray);
		history.setForeground(new Color(235, 235, 235));
		history.setEditable(false);

		//Scroll de historial de instrucciones
		JScrollPane scrollHistory = new JScrollPane(history);
		scrollHistory.setBounds(new Rectangle(10,10,500,300));

		
		//Entrada de instrucciones
		command.setBackground(Color.white);
		command.setBounds(new Rectangle(10,320,500,50));
		
		//Scroll de instrucciones
		JScrollPane scrollCommand = new JScrollPane(command);
		scrollCommand.setBounds(new Rectangle(10,320,500,50));

		//Boton de limpiar historial de instrucciones
		limpiarArchivo.setBounds(new Rectangle(540,50,120,30));
		limpiarArchivo.setFont(letra);
		limpiarArchivo.setText("Clr Archivo");
		limpiarArchivo.setMnemonic('A');
		limpiarArchivo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				PrintWriter escribir;
				try {
					escribir = new PrintWriter(new BufferedWriter(new FileWriter(Interfaz.rutArchivo)));
					escribir.write("");
					
					escribir.close();
					Helper.fileWriter("import lejos.nxt.*;\r\n\r\npublic class "+Interfaz.nomArchivo.replace(".java", "")+" {\r\npublic static void main(String[] args) {");
					
				} catch (IOException e) {
					e.printStackTrace();
				}
				
			}
		});

		//Boton de compilar
		finalizar.setBounds(new Rectangle(540,130,120,30));
		finalizar.setFont(letra);
		finalizar.setText("Finalizar");
		finalizar.setMnemonic('F');
		finalizar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Helper.fileWriter("}\r\n}");
			}
		});
		
		//Boton de limpiar historial de instrucciones
		limpiar.setBounds(new Rectangle(540,210,120,30));
		limpiar.setFont(letra);
		limpiar.setText("Limpiar");
		limpiar.setMnemonic('L');
		limpiar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				history.setText("");
				
			}
		});

		//Boton de compilar
		generar.setBounds(new Rectangle(540,290,120,30));
		generar.setFont(letra);
		generar.setText("Generar");
		generar.setMnemonic('G');
		generar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				history.setText(history.getText()+"\n"+command.getText()+"\n the output is:\n");

					new Compiler(); 

				command.setText("");
			}
		});

		//Agregamos elementos al panel
		this.getContentPane().add(scrollHistory,null);
		this.getContentPane().add(scrollCommand,null);
		this.getContentPane().add(limpiar);
		this.getContentPane().add(generar);
		this.getContentPane().add(limpiarArchivo);
		this.getContentPane().add(finalizar);
		

	}

}
